#!/bin/bash

# 默认输出文件名
DEFAULT_OUTPUT_FILE="$PWD/docs/architecture.md"

# 第三个参数为输出路径，未提供则使用默认值
OUTPUT_FILE=${3:-$DEFAULT_OUTPUT_FILE}

echo "生成文件名: OUTPUT_FILE=$OUTPUT_FILE"

# 检查是否安装 tree
if ! command -v tree &>/dev/null; then
  echo "Error: tree is not installed. Please install it using 'brew install tree'."
  exit 1
fi

# 忽略的文件和文件夹列表，从文件中读取
IGNORE_FILE="$PWD/scripts/.ignore_patterns"
if [[ -f $IGNORE_FILE ]]; then
  IGNORE_ITEMS=$(paste -sd "|" "$IGNORE_FILE")
else
  echo "Warning: 忽略列表文件 $IGNORE_FILE 不存在，使用默认忽略规则。"
  IGNORE_ITEMS="__pycache__|*.pyc|*.log"
fi

# 是否仅显示文件夹（传入 true 或 false）
ONLY_FOLDERS=${1:-false}

# 项目目录（可以通过第二个参数指定）
PROJECT_DIR=${2:-$(pwd)}/apitesting
#PROJECT_DIR=${2:-$(pwd)}/cicd

echo "项目目录: PROJECT_DIR=$PROJECT_DIR"
echo "忽略列表: IGNORE_ITEMS=$IGNORE_ITEMS"
echo "仅显示文件夹: ONLY_FOLDERS=$ONLY_FOLDERS"

# 构造 tree 参数
if [ "$ONLY_FOLDERS" = "true" ]; then
  TREE_ARGS="-d" # 仅显示文件夹
else
  TREE_ARGS=""   # 显示文件和文件夹
fi

# 使用 tree 输出目录结构到 Markdown 文件，并同时在控制台输出
TREE_OUTPUT=$(tree $TREE_ARGS -a --prune -I "$IGNORE_ITEMS" "$PROJECT_DIR" | sed 's/^/    /')
echo "$TREE_OUTPUT"

# 将目录结构保存到 Markdown 文件
echo "$TREE_OUTPUT" >"$OUTPUT_FILE"

# 添加 Markdown 标题
if [[ "$OSTYPE" == "darwin"* ]]; then
  sed -i '' "1s/^/# Project Structure\n\n/" "$OUTPUT_FILE"
else
  sed -i "1s/^/# Project Structure\n\n/" "$OUTPUT_FILE"
fi

# 提示输出结果
echo "Project structure saved to $OUTPUT_FILE"
